/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.geftu.model;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author jorgenei
 */
@Entity
@Table(name = "tb_Relato")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Relato.findAll", query = "SELECT t FROM Relato t"),
    @NamedQuery(name = "Relato.findByNumitem", query = "SELECT t FROM Relato t WHERE t.idrel = :idrel"),
    @NamedQuery(name = "Relato.findByDesenvolvedor", query = "SELECT t FROM Relato t WHERE t.desenvolvedor = :desenvolvedor"),
    @NamedQuery(name = "Relato.findByNomeOBJ", query = "SELECT t FROM Relato t WHERE t.nomeobjeto = :nomeobjeto"),
    @NamedQuery(name = "Relato.findByPassos", query = "SELECT t FROM Relato t WHERE t.passos = :passos"),
    @NamedQuery(name = "Relato.findByPrioridade", query = "SELECT t FROM Relato t WHERE t.prioridade = :prioridade"),
    @NamedQuery(name = "Relato.findByCasoteste", query = "SELECT t FROM Relato t WHERE t.casoteste = :casoteste"),
    @NamedQuery(name = "Relato.findByDtabertura", query = "SELECT t FROM Relato t WHERE t.dtabertura = :dtabertura"),
    @NamedQuery(name = "Relato.findByDtfechamento", query = "SELECT t FROM Relato t WHERE t.dtfechamento = :dtfechamento"),
    @NamedQuery(name = "Relato.findByArquivoup", query = "SELECT t FROM Relato t WHERE t.arquivoup = :arquivoup"),
    @NamedQuery(name = "Relato.findBySituacao", query = "SELECT t FROM Relato t WHERE t.situacao = :situacao"),
    @NamedQuery(name = "Relato.findByExcluido", query = "SELECT t FROM Relato t WHERE t.excluido = :excluido")})
public class Relato implements Serializable {

    private static long serialVersionUID = 1L;

    /**
     * @return the serialVersionUID
     */
    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    /**
     * @param aSerialVersionUID the serialVersionUID to set
     */
    public static void setSerialVersionUID(long aSerialVersionUID) {
        serialVersionUID = aSerialVersionUID;
    }
    @Id
    @SequenceGenerator(name = "idrel", sequenceName = "relato_seq", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "idrel")
    @Basic(optional = false)
    @Column(name = "idrel")
    private Integer idrel;
    @Column(name = "relato")
    private String relato;
    @Column(name = "nomeobjeto")
    private String nomeobjeto;
    @Basic(optional = false)
    @Column(name = "casoteste")
    private String casoteste;
    @Basic(optional = false)
    @Column(name = "passos")
    private String passos;
    @Column(name = "dtabertura")
    private String dtabertura;
    @Column(name = "dtfechamento")
    private String dtfechamento;
    @Column(name = "arquivoup")
    private String arquivoup;
    @Column(name = "situacao")
    private String situacao;
    @Column(name = "prioridade")
    private Integer prioridade;
    @Column(name = "excluido")
    private Boolean excluido;
    @Basic(optional = false)
    @JoinColumn(name = "desenvolvedor", referencedColumnName = "iddes", nullable = false)
    @ManyToOne(optional = false)
    private Desenvolvedor desenvolvedor;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "defeito")
    private Collection<Solucao> SolucaoCollection;
    @JoinColumn(name = "modulo", referencedColumnName = "idmod")
    @ManyToOne(optional = false)
    private Modulo modulo;
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "uploads", targetEntity = Anexo.class)
    
    @JoinColumn(name = "categoriaerro", referencedColumnName = "idcat")
    @ManyToOne(optional = false)
    private Categoria categoriaerro;

    public Relato() {
    }

    public Relato(Integer idrel) {
        this.idrel = idrel;
    }

    public Relato(Integer idrel, Desenvolvedor desenvolvedor, String passos) {
        this.idrel = idrel;
        this.desenvolvedor = desenvolvedor;
        this.passos = passos;
    }

    public String getRelato() {
        return relato;
    }

    public void setRelato(String relato) {
        this.relato = relato;
    }

    public String getDtabertura() {
        return dtabertura;
    }

    public void setDtabertura(String dtabertura) {
        this.dtabertura = dtabertura;
    }

    public String getDtfechamento() {
        return dtfechamento;
    }

    public void setDtfechamento(String dtfechamento) {
        this.dtfechamento = dtfechamento;
    }

    public String getArquivoup() {
        return arquivoup;
    }

    public void setArquivoup(String arquivoup) {
        this.arquivoup = arquivoup;
    }

    public String getSituacao() {
        return situacao;
    }

    public void setSituacao(String situacao) {
        this.situacao = situacao;
    }

    public Boolean getExcluido() {
        return excluido;
    }

    public void setExcluido(Boolean excluido) {
        this.excluido = excluido;
    }

    @XmlTransient
    public Collection<Solucao> getSolucaoCollection() {
        return SolucaoCollection;
    }

    public void setSolucaoCollection(Collection<Solucao> SolucaoCollection) {
        this.SolucaoCollection = SolucaoCollection;
    }

    public Modulo getModulo() {
        return modulo;
    }

    public void setModulo(Modulo modulo) {
        this.modulo = modulo;
    }

    public Categoria getCategoriaerro() {
        return categoriaerro;
    }

    public void setCategoriaerro(Categoria categoriaerro) {
        this.categoriaerro = categoriaerro;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (getIdrel() != null ? getIdrel().hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Relato)) {
            return false;
        }
        Relato other = (Relato) object;
        if ((this.getIdrel() == null && other.getIdrel() != null) || (this.getIdrel() != null && !this.idrel.equals(other.idrel))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "" + getIdrel();
    }

    /**
     * @return the nomeobjeto
     */
    /**
     * @return the nomeobjeto
     */
    public String getNomeobjeto() {
        return nomeobjeto;
    }

    public void setNomeobjeto(String nomeobjeto) {
        this.nomeobjeto = nomeobjeto;
    }

    /**
     * @return the casoteste
     */
    public String getCasoteste() {
        return casoteste;
    }

    /**
     * @param casoteste the casoteste to set
     */
    public void setCasoteste(String casoteste) {
        this.casoteste = casoteste;
    }

    /**
     * @return the passos
     */
    public String getPassos() {
        return passos;
    }

    /**
     * @param idrel
     */
    public void setIdrel(Integer idrel) {
        this.idrel = idrel;
    }

    /**
     * @param passos the passos to set
     */
    public void setPassos(String passos) {
        this.passos = passos;
    }

    /**
     * @return the idrel
     */
    public Integer getIdrel() {
        return idrel;
    }

    /**
     * @return the desenvolvedor
     */
    public Desenvolvedor getDesenvolvedor() {
        return desenvolvedor;
    }

    /**
     * @param desenvolvedor the desenvolvedor to set
     */
    public void setDesenvolvedor(Desenvolvedor desenvolvedor) {
        this.desenvolvedor = desenvolvedor;
    }

    /**
     * @return the prioridade
     */
    public int getPrioridade() {
        return prioridade;
    }

    /**
     * @param prioridade the prioridade to set
     */
    public void setPrioridade(int prioridade) {
        this.setPrioridade((Integer) prioridade);
    }

    /**
     * @param prioridade the prioridade to set
     */
    public void setPrioridade(Integer prioridade) {
        this.prioridade = prioridade;
    }

}
